<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>面向对象之类式继承</title>
</head>
<body>

<script>
    //如下js验证一句话：类式继承里，如果父类的共有属性是个引用类型，那个子类将共享这个引用类型。其中一个子类修改会影响另外一个子类使用
    //但是原始类型就不存在这个情况，我猜的原因是Triangle被实例化两次，那么Triangle的prototype就要实例化两次Shape，这样shape的两个公共变量就要复制两次
    //就会有两份bian和shuxing。bian是原始类型，所以栈里有两个bian，而且就是两个内存；shuxing在栈里有两个引用，但这两个引用的值都指向堆里的同一块内存。

    //如上是类式继承的第一条缺点
    //第二个缺点是子类Triangle的值不能传入父类Shape里初始化，
    function Shape() {
        this.bian = true;
        this.shuxing = ['name','mianji'];
    }
    Shape.prototype.getArea = function () {
        return "loser";
    }
    function Triangle() {}
    Triangle.prototype = new Shape();

    var rightAngle = new Triangle();
    var equilAngle = new Triangle();

    rightAngle.bian = false;
    console.log(equilAngle.bian);
    rightAngle.shuxing.push('ceshi');
    console.log(equilAngle.shuxing);
    console.log(equilAngle.getArea());

    //类式继承子类不光继承了父类的公共方法，而且prototype指向了父类的实例
</script>
</body>
</html>